bitkeeper revision 1.1010.1.8 (40dc2c36FrgEuHCnSupH0LDIdB4C4Q)
authormjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Fri, 25 Jun 2004 13:44:22 +0000 (13:44 +0000)
committermjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Fri, 25 Jun 2004 13:44:22 +0000 (13:44 +0000)
Change blkif, netif destroy to send disconnect first.

tools/xenmgr/lib/server/blkif.py
tools/xenmgr/lib/server/messages.py
tools/xenmgr/lib/server/netif.py

index f23a6d7fa48f3f7cb1226a0a10435541fef09aae..fa46e3b642a4b1d58801bdeb696f40c1740e8d8e 100755 (executable)
@@ -215,8 +215,12 @@ class BlkifController(controller.Controller):
 
     def destroy(self):
         print 'BlkifController>destroy> dom=', self.dom
-        self.destroyDevices()
-        self.send_be_destroy()
+        def cb_destroy(val):
+            self.send_be_destroy()
+        d = self.factory.addDeferred()
+        d.addCallback(cb_destroy)
+        self.send_be_disconnect()
+        #self.destroyDevices()
 
     def destroyDevices(self):
         for dev in self.getDevices():
@@ -290,6 +294,13 @@ class BlkifController(controller.Controller):
                         'blkif_handle' : 0 })
         self.factory.writeRequest(msg)
 
+    def send_be_disconnect(self):
+        print '>BlkifController>send_be_disconnect>', 'dom=', self.dom
+        msg = packMsg('blkif_be_disconnect_t',
+                      { 'domid'        : self.dom,
+                        'blkif_handle' : 0 })
+        self.factory.writeRequest(msg)
+
     def send_be_destroy(self):
         print '>BlkifController>send_be_destroy>', 'dom=', self.dom
         msg = packMsg('blkif_be_destroy_t',
index 03136702790068b33f2505be48b13cb061e998f4..f920bd679ea6a843abb12f315fcc5faf3aa0b578 100644 (file)
@@ -67,6 +67,9 @@ blkif_formats = {
     'blkif_be_create_t':
     (CMSG_BLKIF_BE, CMSG_BLKIF_BE_CREATE),
 
+    'blkif_be_disconnect_t':
+    (CMSG_BLKIF_BE, CMSG_BLKIF_BE_DISCONNECT),
+
     'blkif_be_destroy_t':
     (CMSG_BLKIF_BE, CMSG_BLKIF_BE_DESTROY),
 
@@ -123,12 +126,12 @@ netif_formats = {
     'netif_be_create_t':
     (CMSG_NETIF_BE, CMSG_NETIF_BE_CREATE),
 
-    'netif_be_destroy_t':
-    (CMSG_NETIF_BE, CMSG_NETIF_BE_DESTROY),
-
     'netif_be_disconnect_t':
     (CMSG_NETIF_BE, CMSG_NETIF_BE_DISCONNECT),
 
+    'netif_be_destroy_t':
+    (CMSG_NETIF_BE, CMSG_NETIF_BE_DESTROY),
+
     'netif_be_driver_status_changed_t':
     (CMSG_NETIF_BE, CMSG_NETIF_BE_DRIVER_STATUS_CHANGED),
 
index f999aefcc579ea5a713c6d79e3e0805d0dcf3380..cb7496cd02960aa6792890bb27b14d7f7e3badf6 100755 (executable)
@@ -137,10 +137,15 @@ class NetDev(controller.Dev):
         self.bridge = None
 
     def destroy(self):
+        def cb_destroy(val):
+            self.controller.send_be_destroy(self.vif)
         print 'NetDev>destroy>', 'vif=', self.vif
         PrettyPrint.prettyprint(self.sxpr())
         self.bridge_rem()
-        self.controller.send_be_destroy(self.vif)
+        d = self.controller.factory.addDeferred()
+        d.addCallback(cb_destroy)
+        self.controller.send_be_disconnect(self.vif)
+        #self.controller.send_be_destroy(self.vif)
         
 
 class NetifController(controller.Controller):
@@ -281,6 +286,13 @@ class NetifController(controller.Controller):
                         'mac'          : dev.mac })
         self.factory.writeRequest(msg)
 
+    def send_be_disconnect(self, vif):
+        dev = self.devices[vif]
+        msg = packMsg('netif_be_disconnect_t',
+                      { 'domid'        : self.dom,
+                        'netif_handle' : dev.vif })
+        self.factory.writeRequest(msg)
+
     def send_be_destroy(self, vif):
         print 'NetifController>send_be_destroy>', 'dom=', self.dom, 'vif=', vif
         PrettyPrint.prettyprint(self.sxpr())